package cn.senwill.user_service.test;

public class Solution {

    public static void main(String[] args) {
        Solution solution = new Solution();

        int[] array_1 = {4,5,0,3,2,1};
        solution.sort_1(array_1, array_1.length);
        for (int i = 0; i < array_1.length; i++) {
            System.out.print(array_1[i]);
        }

        System.out.println("");

        int[] array_2 = {3,4,0,5,1,2};
        solution.sort_2(array_2, array_2.length);
        for (int i = 0; i < array_2.length; i++) {
            System.out.print(array_2[i]);
        }
    }

    /**
     * 交换数组里n和0的位置
     *
     * @param array
     *            数组
     * @param len
     *            数组长度
     * @param n
     *            和0交换的数
     */
    // 不要修改以下函数内容
    public void swapWithZero(int[] array, int len, int n) {
        Main.SwapWithZero(array, len, n);
    }
    // 不要修改以上函数内容

    /**
     * 通过调用swapWithZero方法来排
     *
     * @param array
     *            存储有[0,n)的数组
     * @param len
     *            数组长度
     */
    public void sort_1(int[] array, int len) {
        // 首先移动索引为0的位置的数
//        int firstNum = array[0];
//        swapWithZero(array, len, firstNum);

        // 还有索引为1到n-1的位置的数需要移动
        for (int index = 0; index < len; index++) {
            swapWithZero(array, len, index);
            swapWithZero(array, len, array[index]);
            swapWithZero(array, len, index);
        }
    }

    public void sort_2(int[] array, int len) {
        for(int i = 0;i < len ;i++){
            if(array [i] == i){
                continue;
            }
            swapWithZero(array, len, array [i]);
            swapWithZero(array, len, i);
        }
    }
}

class Main {
    /**
     * 交换数组中0和n
     * @param array
     * @param len
     * @param n
     */
    public static void SwapWithZero(int[] array, int len, int n) {
        /**
         * 0的位置改为n
         * n的位置改为0
         */
        for (int i = 0; i < len; i++) {
            if (array[i] == 0) {
                array[i] = n;
            }
            else if (array[i] == n) {
                array[i] = 0;
            }
        }
    }
}
